﻿using System.Collections.Generic;
using System.ServiceModel;
using RBAC.Service.Dto;


namespace RBAC.Service
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService" in both code and config file together.
    [ServiceContract]
    public interface IService
    {
        [OperationContract]
        void InvokeDB();

        [OperationContract]
        ResponseDto<UserDto> AddUser(UserDto arg);

        [OperationContract]
        ResponseDto<UserDto> DeleteUser(List<string> args);

        [OperationContract]
        ResponseDto<List<UserDto>> GetAllUser(GetAllUserRequestDto arg);

        [OperationContract]
        ResponseDto<UserDto> UpdateUser(UserDto arg);

        [OperationContract]
        ResponseDto<bool> ExistUser(string arg);
        [OperationContract]
        ResponseDto<RoleDto> AddRole(RoleDto arg);

        [OperationContract]
        ResponseDto<RoleDto> DeleteRole(List<string> args);

        [OperationContract]
        ResponseDto<List<RoleDto>> GetAllRole(GetAllRoleRequestDto arg);

        [OperationContract]
        ResponseDto<RoleDto> UpdateRole(RoleDto arg);

        [OperationContract]
        ResponseDto<bool> ExistRole(string arg);
        [OperationContract]
        ResponseDto<PermissionDto> AddPermission(PermissionDto arg);

        [OperationContract]
        ResponseDto<PermissionDto> DeletePermission(List<string> args);

        [OperationContract]
        ResponseDto<List<PermissionDto>> GetAllPermission(GetAllPermissionRequestDto arg);

        [OperationContract]
        ResponseDto<PermissionDto> UpdatePermission(PermissionDto arg);

        [OperationContract]
        ResponseDto<bool> ExistPermission(string arg);
        [OperationContract]
        ResponseDto<FunctionDto> AddFunction(FunctionDto arg);

        [OperationContract]
        ResponseDto<FunctionDto> DeleteFunction(List<string> args);

        [OperationContract]
        ResponseDto<List<FunctionDto>> GetAllFunction(GetAllFunctionRequestDto arg);

        [OperationContract]
        ResponseDto<FunctionDto> UpdateFunction(FunctionDto arg);

        [OperationContract]
        ResponseDto<bool> ExistFunction(string arg);
        [OperationContract]
        ResponseDto<DomainDto> AddDomain(DomainDto arg);

        [OperationContract]
        ResponseDto<DomainDto> DeleteDomain(List<string> args);

        [OperationContract]
        ResponseDto<List<DomainDto>> GetAllDomain(GetAllDomainRequestDto arg);

        [OperationContract]
        ResponseDto<DomainDto> UpdateDomain(DomainDto arg);

        [OperationContract]
        ResponseDto<bool> ExistDomain(string arg);



        [OperationContract]
        ResponseDto<RoleUserDto> AddRoleUser(RoleUserDto arg);

        [OperationContract]
        ResponseDto<RoleUserDto> DeleteRoleUser(List<string> args);

        [OperationContract]
        ResponseDto<List<RoleUserDto>> GetAllRoleUser(GetAllRoleUserRequestDto arg);

        [OperationContract]
        ResponseDto<RoleUserDto> UpdateRoleUser(RoleUserDto arg);

        [OperationContract]
        ResponseDto<bool> ExistRoleUser(string arg);
    }
}

